package Controller;

import java.util.ArrayList;
import java.util.List;

import Beans.AdministracionBean;
import Beans.SucursalBean;
import DAO.HibernateAdministracionDAO;
import DTO.AdministracionDTO;
import Model.Administracion;
import Model.Sucursal;

public class AdministradorAdministracion {
private static AdministradorAdministracion instancia;
	
	private AdministradorAdministracion(){
		
	}
	
	public static AdministradorAdministracion getInstancia(){
		if(instancia==null){
			instancia=new AdministradorAdministracion();
		}
		return instancia;
	}

	public List<AdministracionBean> fromModelToBean(List<Administracion> administracions) {
		List<AdministracionBean> administracionsBean=new ArrayList<AdministracionBean>();
		for (Administracion administracion : administracions) {
			administracionsBean.add(fromModelTOBean(administracion));
		}
		return administracionsBean;
	}

	public AdministracionBean fromModelTOBean(Administracion administracion) {
		AdministracionBean administracionBean=null;
		if(administracion!=null){
		administracionBean=new AdministracionBean();
		administracionBean.setArea(AdministradorArea.getInstancia().fromModelTOBean(administracion.getArea()));
		administracionBean.setId(administracion.getId());
		administracionBean.setNotasDevolucion(AdministradorNotaDevolucion.getInstancia().fromModelTOBean(administracion.getNotasDevolucion()));
		administracionBean.setOrdenesCompra(AdministradorOrdenCompra.getInstancia().fromModelTOBean(administracion.getOrdenesCompra()));
		administracionBean.setPlanesProduccion(AdministradorPlanProduccion.getInstancia().fromModelTOBean(administracion.getPlanesProduccion()));
		administracionBean.setSucursal(AdministradorSucursal.getInstancia().fromModelTOBean(administracion.getSucursal()));
		}
		return administracionBean;
	}

	public List<Administracion> fromDTOTOModel(List<AdministracionDTO> administracionsDTO) {
		List<Administracion> administracions=new ArrayList<Administracion>();
		for (AdministracionDTO administracionDTO : administracionsDTO) {
			administracions.add(fromDTOTOModel(administracionDTO));
		}
		return administracions;
	}
	
	public List<AdministracionDTO> fromModelTODTO(List<Administracion> administracions) {
		List<AdministracionDTO> administracionsDTO=new ArrayList<AdministracionDTO>();
		for (Administracion administracion : administracions) {
			administracionsDTO.add(fromModelTODTO(administracion));
		}
		return administracionsDTO;
	}
	
	public Administracion fromDTOTOModel(AdministracionDTO administracionDTO) {
		Administracion administracion=null;
		if(administracionDTO!=null){
		administracion=new Administracion();
		administracion.setArea(AdministradorArea.getInstancia().fromDTOTOModel(administracionDTO.getArea()));
		administracion.setId(administracionDTO.getId());
		administracion.setNotasDevolucion(AdministradorNotaDevolucion.getInstancia().fromDTOTOModel(administracionDTO.getNotasDevolucion()));
		administracion.setOrdenesCompra(AdministradorOrdenCompra.getInstancia().fromDTOTOModel(administracionDTO.getOrdenesCompra()));
		administracion.setPlanesProduccion(AdministradorPlanProduccion.getInstancia().fromDTOTOModel(administracionDTO.getPlanesProduccion()));
		administracion.setSucursal(AdministradorSucursal.getInstancia().fromDTOTOModel(administracionDTO.getSucursal()));
		}
		return administracion;
	}

	
	public AdministracionDTO fromModelTODTO(Administracion administracion) {
		AdministracionDTO administracionDTO=null;
		if(administracion!=null){
		administracionDTO=new AdministracionDTO();
		administracionDTO.setArea(AdministradorArea.getInstancia().fromModelTODTO(administracion.getArea()));
		administracionDTO.setId(administracion.getId());
		administracionDTO.setNotasDevolucion(AdministradorNotaDevolucion.getInstancia().fromModelTODTO(administracion.getNotasDevolucion()));
		administracionDTO.setOrdenesCompra(AdministradorOrdenCompra.getInstancia().fromModelTODTO(administracion.getOrdenesCompra()));
		administracionDTO.setPlanesProduccion(AdministradorPlanProduccion.getInstancia().fromModelTODTO(administracion.getPlanesProduccion()));
		administracionDTO.setSucursal(AdministradorSucursal.getInstancia().fromModelTODTO(administracion.getSucursal()));
		}
		return administracionDTO;
	}
	
	public List<Administracion> fromBeanTOModel(List<AdministracionBean> administracionsBean) {
		List<Administracion> administracions=new ArrayList<Administracion>();
		for (AdministracionBean administracionBean : administracionsBean) {
			administracions.add(fromBeanTOModel(administracionBean));
		}
		return administracions;
	}

	public Administracion fromBeanTOModel(AdministracionBean administracionBean) {
		Administracion administracion=null;
		if(administracionBean!=null){
			administracion=new Administracion();
			administracion.setArea(AdministradorArea.getInstancia().fromBeanTOModel(administracionBean.getArea()));
			administracion.setId(administracionBean.getId());
			administracion.setNotasDevolucion(AdministradorNotaDevolucion.getInstancia().fromBeanTOModel(administracionBean.getNotasDevolucion()));
			administracion.setOrdenesCompra(AdministradorOrdenCompra.getInstancia().fromBeanTOModel(administracionBean.getOrdenesCompra()));
			administracion.setPlanesProduccion(AdministradorPlanProduccion.getInstancia().fromBeanTOModel(administracionBean.getPlanesProduccion()));
			administracion.setSucursal(AdministradorSucursal.getInstancia().fromBeanTOModel(administracionBean.getSucursal()));
		}
		return administracion;
	}

	public void grabarAdministracion(Administracion administracion) {
		AdministracionBean fb=fromModelTOBean(administracion);
		HibernateAdministracionDAO.getInstancia().grabarAdministracion(fb);
		
	}
	
	public Administracion buscarAdministracion(Administracion f){
		AdministracionBean fb=fromModelTOBean(f);
		fb=HibernateAdministracionDAO.getInstancia().buscarAdministracion(fb);
		return fromBeanTOModel(fb);
	}
	
	public List<Administracion> buscarAdministracionXSucursal(Sucursal s){
		SucursalBean sb=AdministradorSucursal.getInstancia().fromModelTOBean(s);
		List<AdministracionBean> fb= (List<AdministracionBean>) HibernateAdministracionDAO.getInstancia().buscarAdministracionXSucursal(sb);
		return fromBeanTOModel(fb);
	}

	public void updateAdministracion(Administracion adm) {
		AdministracionBean admb=fromModelTOBean(adm);
		HibernateAdministracionDAO.getInstancia().updateAdministracion(admb);
		
	}
	
}
